package aceim.protocol.snuk182.icq;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import aceim.api.dataentity.ConnectionState;
import aceim.api.dataentity.ProtocolOption;
import aceim.api.dataentity.ProtocolServiceFeature;
import aceim.api.service.ProtocolService;
import aceim.protocol.snuk182.icq.utils.ResourceUtils;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
public class ICQProtocol extends ProtocolService<ICQService> {
private final InternetConnectionChecker mInternetConnectionChecker = new InternetConnectionChecker();
@Override
protected ICQService createService(byte serviceId, String protocolUid) {
return new ICQService(serviceId, protocolUid, getCallback(), getBaseContext());
}
@Override
protected ProtocolServiceFeature[] getProtocolFeatures() {
return ResourceUtils.getFeatures(getBaseContext());
}
@Override
protected String getProtocolName() {
return IcqApiConstants.PROTOCOL_NAME;
}
@Override
protected ProtocolOption[] getProtocolOptions() {
return ResourceUtils.OPTIONS;
}
@Override
public void onDestroy() {
getBaseContext().unregisterReceiver(mInternetConnectionChecker);
}
@Override
public void onCreate() {
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
getBaseContext().registerReceiver(mInternetConnectionChecker, intentFilter);
}
private class InternetConnectionChecker extends BroadcastReceiver {
private volatile boolean isRunning = false;
@Override
public void onReceive(Context context, Intent intent) {
if (!isRunning) {
ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
scheduledExecutorService.schedule(new Runnable() {
@Override
public void run() {
for (final ICQService service : mAccountServices) {
if (service.getCurrentState() != ConnectionState.DISCONNECTED) {
service.getProtocol().disconnect();
}
}
isRunning = false;
}
}, 2, TimeUnit.SECONDS);
}
}
}
}